import com.alibaba.excel.EasyExcel;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * @author Tim Hooper
 * @version 1.0
 * @time 2022/10/05/3:46
 */
public class ExcelDemo {
    public static void main(String[] args) {

        String readPath = "D:/read.xlsx";
        List<Content> list = new ArrayList<>();
        //读取excel
        //read(文件路径,对象类型,监听器对象)
        EasyExcel.read(readPath, Content.class, new ExcelListener(list)).sheet().doRead();
        //文件输出路径
        String writePath = "D:/write.xlsx";
        //调用write方法,传入写出文件路径,以及写出对象的类型,
        //.sheet()中为sheet的名称
        //调用doWrite()传入list数据即可写出
        list = orderContent(list);
        System.out.println("start writing\n===============================");
        list.forEach(item -> System.out.println(item.getRow()));
        EasyExcel.write(writePath, Content.class).sheet("sheet name")
                .doWrite(list);
        System.out.println("write done");
    }

    public static List<Content> orderContent(List<Content> content) {
        //创建map 统计每个word出现的次数
        HashMap<String, Integer> map = new HashMap<>();
        //创建list ：有序地把次数绑定word后
        ArrayList<String> list = new ArrayList<>();
        for (Content con : content) {
            String row = con.getRow();
            map.put(row, map.getOrDefault(row, 0) + 1);
            //分隔符 可以自行替换，为了取次数和防止字符串最后一位是数字的情况
            list.add(row + "|" + map.get(row));
        }
        //创建list：最终结果 可以不创建，直接修改content 我懒得弄了
        ArrayList<Content> arrayList = new ArrayList<>();
        //再次遍历
        for (int i = 0; i < content.size(); i++) {
            //取得绑定后的word
            String str = list.get(i);
            //判断该word是否只出现一次，为一次则保持原样
            if (map.get(content.get(i).getRow()) == 1) {
                arrayList.add(new Content(content.get(i).getRow()));
            } else {
                //根据分隔符分割
                String[] split = str.split("\\|");
                //取得最后的次数并保存
                arrayList.add(new Content(content.get(i).getRow() + split[split.length - 1]));
            }
        }
        return arrayList;
    }
}
